package com.controller;

import com.api.CommonResult;
import com.entity.Type;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * 商品分类 控制层。
 *
 * @author admin
 * @since 2025-11-21
 */
@Controller // 返回页面，如需混合返回JSON可调整为@RestController+对应注解
@RequestMapping("/admin/type") // 商品类型后台接口路径
public class TypeController {

    @Autowired
    private TypeService typeService;

    //    /**
//     * 商品类型列表分页查询（支持类型名称模糊搜索）
//     */
    @GetMapping("typeList")
    public String page(
            // 分页对象由MyBatisFlex自动注入
            Page<Type> page,
            @RequestParam(value = "p", defaultValue = "1") int p,
            @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
            @RequestParam(value = "typeName", required = false) String typeName,
            Model model) {

        // 设置分页参数
        page.setPageSize(pageSize); // 每页显示条数
        page.setPageNumber(p); // 当前页码

        // 构建查询条件
        QueryWrapper queryWrapper = new QueryWrapper();
        if (typeName != null && !typeName.trim().isEmpty()) {
            queryWrapper.like("type_name", typeName.trim()); // 防止空字符串导致全表模糊查询
        }

        // 执行分页查询
        Page<Type> typePage = typeService.page(page, queryWrapper);

        // 封装分页数据到模型（回显搜索关键词+分页信息）
        model.addAttribute("page", typePage);
        model.addAttribute("typeName", typeName);
        return "back/type-list"; // 商品类型列表页面路径
    }

    /**
     * 显示添加商品类型页面
     */
    @GetMapping("addView")
    public String addView() {
        return "back/type-add"; // 商品类型添加页面路径
    }

    /**
     * 新增商品类型
     */
    @PostMapping("save")
    @ResponseBody // 返回JSON数据而非页面
    public CommonResult save(Type type) {
        try {
            boolean saveSuccess = typeService.save(type);
            return saveSuccess ? CommonResult.success("新增成功") : CommonResult.failed("新增失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }

    /**
     * 显示编辑商品类型页面
     */
    @GetMapping("updateView")
    public String updateView(int id, Model model) {

        // 根据ID查询商品类型
        Type type = typeService.getById(id);

        // 校验类型是否存在
        if (type == null) {
            model.addAttribute("errorMsg", "商品类型不存在或已删除");
            return "back/error"; // 错误页面路径
        }

        model.addAttribute("type", type);
        return "back/type-edit"; // 商品类型编辑页面路径
    }

    /**
     * 更新商品类型信息
     */
    @PostMapping("update")
    @ResponseBody
    public CommonResult update(Type type) { // 表单提交可改为@ModelAttribute Type type
        try {

            boolean updateSuccess = typeService.updateById(type);
            return updateSuccess ? CommonResult.success("修改成功") : CommonResult.failed("修改失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }

    /**
     * 删除商品类型
     */
    @PostMapping("del")
    @ResponseBody
    public CommonResult del(int id) {
        try {
            boolean deleteSuccess = typeService.removeById(id);
            return deleteSuccess ? CommonResult.success("删除成功") : CommonResult.failed("删除失败");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.failed("系统异常：" + e.getMessage());
        }
    }

}
